//
// Created by yzpang on 2025/5/20.
//

#ifndef POLYNOMIAL_H
#define POLYNOMIAL_H

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "LinkList.h"

/* 一元多项式类型定义 */
typedef LinkList Polynomial;

/*=========================一元多项式操作=================================*/

/**
 * 创建
 *
 * 创建项数为m的一元多项式
 * @param P
 * @param m
 */
void CreatePolyn(Polynomial* P, int m);

/**
 * 销毁
 *
 * 销毁一元多项式
 * @param P
 */
void DestroyPolyn(Polynomial* P);

/**
 * 计数
 *
 * 返回一元多项式的项数.
 * @param P
 * @return
 */
int PolynLength(Polynomial P);

/**
 * 加法
 *
 * 一元多项式相加 Pa = Pa + Pb
 * 计算完成后, 计算结果保存在Pa, Pb销毁
 * @param Pa
 * @param Pb
 */
void AddPolyn(Polynomial* Pa, Polynomial* Pb);

/**
 * 减法
 *
 * 一元多项式相减 Pa = Pa - Pb
 * 计算完成后, 计算结果保存在Pa, Pb销毁
 * @param Pa
 * @param Pb
 */
void SubtractPolyn(Polynomial* Pa, Polynomial* Pb);

/**
 * 乘法
 *
 * 一元多项式相乘 Pa = Pa * Pb
 * 计算完成后, 计算结果保存在Pa, Pb销毁
 * @param Pa
 * @param Pb
 */
void MultiplyPolyn(Polynomial* Pa, Polynomial* Pb);

/**
 * 输出
 *
 * 打印输出一元多项式
 * @param P
 */
void PrintPolyn(Polynomial P);

/**
 * 比较
 *
 * 比较c1和c2项指数大小
 * @param c1
 * @param c2
 * @return
 */
int Cmp(ElemType c1, ElemType c2);

#endif //POLYNOMIAL_H
